import java.awt.BorderLayout;
import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.HashSet;
import java.util.StringTokenizer;
import java.util.Vector;

import javax.swing.DefaultListModel;
import javax.swing.SwingConstants;
import javax.swing.JComboBox;
import javax.swing.JScrollPane;
import javax.swing.JList;
import javax.swing.ScrollPaneConstants;
/**
 * Fenêtre de saisie d'un ouvrage 
 * Code du JFrame généré par Window Builder/Swing Designer.
 * @author IUT,  A.Culet 
 * @version 1.0
 */
public class VueSaisieOuvrage extends Vue {

	private JPanel contentPane;
	private JTextField textFieldIsbn ;
	private JTextField textFieldTitre;
	private JTextField textFieldDate;
	private JTextField textFieldEditeur;
	private JButton buttonCreer;
	private JButton buttonQuitter;
	//private JComboBox comboBox;
	private JButton buttonAjouterAuteur;
	private JButton buttonAjouterMotCle;
	private JButton buttonEnregistrer;
	private JList list;
	private JComboBox comboBox;
	private Vector<String> vect;
	private HashSet<String> selectAut;
	private HashSet<String> selectMotCles;
	private String isbn;
	private String titre;
	private String editeur;
	private String dateEdition;	
	
	/**
	 * Create the frame.
	 */
	public VueSaisieOuvrage(Controleur controleur,HashSet<Auteur> auteurs, HashSet<MotCle> motCles) {
		super(controleur);

		setTitle("Enregistrement d'un nouvel ouvrage");
		setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 
		setBounds(100, 100, 450, 550);
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		setContentPane(contentPane);
		contentPane.setLayout(null);
		
		JLabel lblNewLabel = new JLabel("Isbn");
		lblNewLabel.setHorizontalAlignment(SwingConstants.RIGHT);
		lblNewLabel.setBounds(99, 32, 61, 15);
		contentPane.add(lblNewLabel);
		
		textFieldIsbn = new JTextField();
		textFieldIsbn.setBounds(170, 32, 141, 19);
		contentPane.add(textFieldIsbn);
		textFieldIsbn.setColumns(10);
		
		JLabel lblNewLabel_1 = new JLabel("Titre");
		lblNewLabel_1.setHorizontalAlignment(SwingConstants.RIGHT);
		lblNewLabel_1.setBounds(99, 66, 61, 15);
		contentPane.add(lblNewLabel_1);
		
		textFieldTitre = new JTextField();
		textFieldTitre.setBounds(170, 65, 225, 19);
		contentPane.add(textFieldTitre);
		textFieldTitre.setColumns(10);
		
		buttonCreer = new JButton("Creer");							//saisie d'un ouvrage
		buttonCreer.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				 isbn = textFieldIsbn.getText();
				 titre = textFieldTitre.getText();
				 editeur = textFieldEditeur.getText();
				 dateEdition = textFieldDate.getText();
				 getControleur().creerOuvrage(isbn,titre,editeur,dateEdition);
				}
		});
		buttonCreer.setBounds(302, 198, 107, 25);
		contentPane.add(buttonCreer);
		
		JLabel lblNewLabel_2 = new JLabel("Date \u00E9dition (MM/AAAA)");
		lblNewLabel_2.setHorizontalAlignment(SwingConstants.RIGHT);
		lblNewLabel_2.setBounds(12, 130, 154, 33);
		contentPane.add(lblNewLabel_2);
		
		textFieldDate = new JTextField();
		textFieldDate.setBounds(170, 139, 141, 19);
		contentPane.add(textFieldDate);
		textFieldDate.setColumns(10);
		
		JLabel lblEditeur = new JLabel("Editeur");
		lblEditeur.setHorizontalAlignment(SwingConstants.RIGHT);
		lblEditeur.setBounds(99, 103, 61, 15);
		contentPane.add(lblEditeur);
		
		textFieldEditeur = new JTextField();
		textFieldEditeur.setColumns(10);
		textFieldEditeur.setBounds(170, 101, 225, 19);
		contentPane.add(textFieldEditeur);
		
		comboBox= new JComboBox();
		comboBox.setBounds(111, 280, 168, 19);
		contentPane.add(comboBox);
		String chaine;
		
		//Remplissage de la comboBox
		if(auteurs!=null){
		for(Auteur a:auteurs ){
			
			chaine=a.getNom()+" "+a.getPrenom();
			comboBox.addItem(chaine);
		}
		}
		JLabel lblAuteur = new JLabel("Auteur");
		lblAuteur.setBounds(32, 282, 61, 15);
		contentPane.add(lblAuteur);
		
		selectAut= new HashSet<String>();
		buttonAjouterAuteur = new JButton("Ajouter");
		buttonAjouterAuteur.setBounds(302, 277, 107, 25);
		
		buttonAjouterAuteur.addActionListener(new ActionListener() {
		//Creation de la liste de mot auteur	
		public void actionPerformed(ActionEvent e) {
			Object val;
			val=comboBox.getSelectedItem();
			Vector<String> nomPrenom = new Vector<String>();
			if(val!=null){
				boolean existe=false;
					for(String aut:selectAut){
						if(aut==val.toString()){
							existe=true;
						}
					}
					if(existe==true){
						Message dialog = new Message("Cet auteur a déjà été séléctionné ");
						dialog.setVisible(true);			
					}
					else{
						StringTokenizer parser = new StringTokenizer(val.toString());
						while (parser.hasMoreTokens())  {
							nomPrenom.add(parser.nextToken());
						}
						if(nomPrenom.size()==2){
							selectAut.add(val.toString());
						}
						else{
							Message dialog = new Message("Un auteur a un nom et un prenom ");
							dialog.setVisible(true);
						}
					}
			}
			}

		});

		contentPane.add(buttonAjouterAuteur);
		
		JScrollPane scrollPane = new JScrollPane();
		scrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
		scrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
		scrollPane.setBounds(111, 347, 168, 87);
		contentPane.add(scrollPane);
	    vect =  new Vector<String>();
	   for(MotCle theme:motCles){
		   vect.add(theme.getMotCle());
	   }
	    
		list = new JList(vect);
		scrollPane.setViewportView(list);
		
		JLabel lblTheme = new JLabel("Theme");
		lblTheme.setBounds(32, 379, 61, 15);
		contentPane.add(lblTheme);
		
		buttonAjouterMotCle = new JButton("Ajouter");
		buttonAjouterMotCle.setBounds(302, 374, 107, 25);
		contentPane.add(buttonAjouterMotCle);
		
		//Creation de la liste de motCle
		selectMotCles= new HashSet<String>();
		buttonAjouterMotCle.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				Object val;
				val=list.getSelectedValue();
				if(val!=null){
					boolean existe=false;
					for(String mc:selectMotCles){
						if(mc==val.toString()){
							existe=true;
						}
					}
					if(existe==false){
						selectMotCles.add(val.toString());					
					}
					else{
						Message dialog = new Message("Ce theme a déjà été séléctionné ");
						dialog.setVisible(true);					
					}

				}
			}
		});
		
		buttonEnregistrer = new JButton("Enregistrer");
		buttonEnregistrer.setBounds(267, 475, 107, 25);
		buttonEnregistrer.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {

				//getControleur().creerOuvrage(isbn,titre,editeur,dateEdition,selectAut,selectMotCles);
				if(selectAut.size()==0 || selectMotCles.size()==0){
					Message dialog = new Message("Veuillez selectionner au moin un auteur et un theme ");
					dialog.setVisible(true);
				}
				else{
					getControleur().nouvOuvrage(isbn,titre,editeur,dateEdition,selectAut,selectMotCles);
				}
			}
		});
		contentPane.add(buttonEnregistrer);
		
		buttonQuitter = new JButton("Quitter");
		buttonQuitter.setBounds(86, 475, 107, 25);
		buttonQuitter.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				getControleur().fermerVue(VueSaisieOuvrage.this);}
		});
		contentPane.add(buttonQuitter);
	}
	
	public void setEtat (int etat){
		switch (etat) {
		case initiale: {
			buttonCreer.setEnabled(true);
			buttonQuitter.setEnabled(true);
		    comboBox.setEditable(false);
			buttonAjouterAuteur.setEnabled(false);
			buttonAjouterMotCle.setEnabled(false);
			buttonEnregistrer.setEnabled(false);
			break;
			}
		case finale: {
			buttonCreer.setEnabled(false);
			comboBox.setEditable(true);
			buttonAjouterAuteur.setEnabled(true);
			buttonAjouterMotCle.setEnabled(true);
			buttonEnregistrer.setEnabled(true);
			break;
		}
		}
	}
	
	}
